Apache Tapestry একটি event-driven programming পদ্ধতি অনুসরণ করে, যেখানে পেজ বা কম্পোনেন্টের মধ্যে ইভেন্ট ট্রিগারিং এবং ইভেন্ট হ্যান্ডলিং একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। Tapestry তে Event Bubbles এবং Event Delegation দুটি গুরুত্বপূর্ণ ধারণা, যা ইভেন্ট প্রক্রিয়াকরণের ফ্লো এবং কার্যকারিতা নিয়ন্ত্রণ করে। এই দুটি ধারণা বুঝতে পারলে, Tapestry এর ইভেন্ট সিস্টেম আরও পরিষ্কার এবং কার্যকরীভাবে ব্যবহার করা যাবে।
Event Bubbles হল একটি প্রক্রিয়া যেখানে একটি কম্পোনেন্ট ইভেন্ট ট্রিগার করার পর, সেই ইভেন্টটি উপরের স্তরের কম্পোনেন্টে (যেমন পেজে বা পেজের সন্নিহিত কম্পোনেন্টে) "বুবল" (propagate) হয়ে পৌঁছায়। এটি DOM (Document Object Model) এর সাথে সম্পর্কিত একটি ধারণা, যেখানে ইভেন্ট শুরু হয় এবং উপরের স্তরে প্রপাগেট করে, যতক্ষণ না তা থামানো হয়।
Tapestry তে ইভেন্ট বুবলিং এর মাধ্যমে কম্পোনেন্টগুলো তাদের parent component অথবা page এর দিকে ইভেন্ট প্রেরণ করতে পারে।
ধরা যাক, একটি button ক্লিক করার পর আপনি চান যে ইভেন্টটি কম্পোনেন্ট থেকে পেজের দিকে প্রপাগেট হোক।
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<body>
<t:button t:id="clickButton" value="Click Me" />
</body>
</html>
package com.example.pages;
import org.apache.tapestry5.annotations.OnEvent;
public class ButtonPage {
// Button click event handler
@OnEvent(value = "click", component = "clickButton")
public String onButtonClick() {
// Handle the button click event here
return "Button clicked, event bubbled!";
}
}
এখানে:
Event Delegation হল একটি প্রক্রিয়া যেখানে একটি কম্পোনেন্ট ইভেন্টটি তার parent component বা parent page এ ডেলিগেট (delegated) করে, এবং সেই parent ইভেন্টটি হ্যান্ডল করে। Tapestry তে, একটি কম্পোনেন্ট তার প্যারেন্ট বা পেজে ইভেন্ট ডেলিগেট করতে পারে, যা অনেক সময় প্রয়োজনীয় এবং সহজ।
ধরা যাক, একটি কম্পোনেন্টে যখন ইভেন্ট ট্রিগার হয়, তখন সেই ইভেন্টটি পেজের কাছে ডেলিগেট করা হবে।
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<body>
<t:button t:id="childButton" value="Click Me" />
</body>
</html>
package com.example.components;
import org.apache.tapestry5.annotations.OnEvent;
public class ChildComponent {
@OnEvent(value = "click", component = "childButton")
public String onButtonClick() {
return "Button clicked in child component!";
}
}
package com.example.pages;
import org.apache.tapestry5.annotations.OnEvent;
public class ParentPage {
@OnEvent(value = "click", component = "childButton")
public String onChildButtonClick() {
return "Event delegated to parent page!";
}
}
এখানে:
বৈশিষ্ট্য | Event Bubbles | Event Delegation |
---|---|---|
প্রক্রিয়া | ইভেন্ট কম্পোনেন্ট থেকে উপরের স্তরের কম্পোনেন্ট বা পেজে প্রপাগেট হয়। | ইভেন্ট এক কম্পোনেন্ট বা পেজ থেকে অন্য কম্পোনেন্ট বা পেজে ডেলিগেট হয়। |
হ্যান্ডলিং | উপরের স্তরের কম্পোনেন্ট বা পেজে হ্যান্ডল করা হয়। | প্যারেন্ট কম্পোনেন্ট বা পেজে হ্যান্ডল করা হয়। |
ব্যবহার | সাধারণত, কম্পোনেন্টের মধ্যে ইভেন্ট ট্রান্সফার করতে। | যখন আপনি ইভেন্ট প্যারেন্ট পেজ বা কম্পোনেন্টে ডেলিগেট করতে চান। |
কার্যকারিতা | ইভেন্টটি একটি কম্পোনেন্ট থেকে উপরের স্তরে পৌঁছে, তবে এটি থামানো যেতে পারে। | ইভেন্টটি সরাসরি প্যারেন্ট কম্পোনেন্ট বা পেজে পাঠানো হয়। |
Event Bubbles এবং Event Delegation Tapestry এর ইভেন্ট প্রক্রিয়াকরণে গুরুত্বপূর্ণ ভূমিকা পালন করে। Event Bubbles তে, একটি কম্পোনেন্টের ইভেন্ট উপরের স্তরের কম্পোনেন্ট বা পেজে প্রপাগেট করে, যখন Event Delegation তে, একটি কম্পোনেন্ট তার ইভেন্ট প্যারেন্ট কম্পোনেন্ট বা পেজে ডেলিগেট করে। দুটি প্রক্রিয়া কোডের কার্যকারিতা এবং প্রক্রিয়া ব্যবস্থাপনা সহজ করে এবং Tapestry এর ইভেন্ট সিস্টেমকে আরও নমনীয় ও কার্যকরী করে তোলে।
Read more